SeeVEは、NVD (National Vulnerability Database) の CVE 情報と ExploitDB の実証コード (PoC) を統合・分析し、LLM による自動脆弱性悪用可能性評価と 2 段階ハイブリッド検索アルゴリズムに基づく類似脆弱性推測を提供するセキュリティ解析プラットフォームです。
-
🔍 2 段階ハイブリッド検索 & カスタムリランキング (2-Stage Hybrid Search)
- Stage 1 (Vector Search): OpenAI
text-embedding-3-small(1536 次元) ベクトル埋め込みデータと Annoy (Approximate Nearest Neighbors Oh Yeah) インデックスを活用し、膨大な CVE データベースからミリ秒単位で上位候補を高速抽出します。 - Stage 2 (Custom Reranking): 抽出された候補に対して多角的な情報に基づくリランキングを実施します。
- 📐 ベクトル類似度 (重み:
0.60) - 🕸️ CWE 階層グラフ距離 (重み:
0.20): MITRE CWE の親子関係グラフに基づく最短経路距離 (BFS) スコアリング - 🏷️ CPE キーワードマッチ (重み:
0.15): ベンダー・製品情報の一致判定 - 📊 CVSS ベクトル一致度 (重み:
0.05): 攻撃ベクトル (AV), 複雑さ (AC), 必要な特権 (PR), ユーザー関与 (UI) の適合率
- 📐 ベクトル類似度 (重み:
- Stage 1 (Vector Search): OpenAI
-
🤖 Gemini LLM による自動悪用可能性評価 (LLM Evaluation)
- Google Gemini API (
gemini-3.1-flash-lite/gemini-2.5-flash) を用い、実証コードまたは NVD 記述から以下の 3 要素を日本語で構造化抽出します。- アタックサーフェス (Attack Surface): 攻撃対象となるエントリポイント、プロトコル、ポート、パラメータなど
- ペイロードの構造 (Payload Structure): 悪意あるペイロードのフォーマットやデータ構造
- 実行前提条件 (Prerequisites): 攻撃成立に必要な認証・権限・環境条件
- Google Gemini API (
-
📁 ExploitDB Git Submodule 統合 & オフライン対応
- ExploitDB リポジトリを Git Submodule として直接管理。ローカルの
files_exploits.csvを高速解析し、ネットワークに依存しない安定した実証コード検索およびローカル/API.phpモックサーバー運用を実現します。
- ExploitDB リポジトリを Git Submodule として直接管理。ローカルの
-
⚡ 高速キャッシング & ダッシュボード UI
- SQLite WAL (Write-Ahead Logging) モードと 24 時間 TTL キャッシュテーブル構造により、重複リクエストの高速化を実現。
- Mock / Live モード切り替えに対応した直感的な Web ダッシュボード画面を提供。
- Python:
3.13以上 - パッケージマネージャー:
uv(高速な Python パッケージ・プロジェクト管理ツール) - バージョン管理:
Git(ExploitDB サブモジュール同期用)
- ベクトル検索:
annoy(>=1.17.3) - AI / LLM API:
google-genai(>=2.12.1),openai(>=2.46.0) - データ処理・計算:
numpy,pandas,scikit-learn - ネットワーク & 設定:
requests,python-dotenv
chiteki/
├── data/ # データストア・インデックス群
│ ├── cache/ # SQLite データベース (nvd.db, WAL モード)
│ ├── cwe/ # CWE 階層構造定義 (cwec_latest.xml, cwe_graph.json)
│ ├── exploitdb/ # Git Submodule (Exploit-DB 公式リポジトリ)
│ ├── feeds/ # NVD オフラインフィードデータ (.json.gz)
│ └── index/ # Annoy ベクトル検索用インデックス (cve_index.ann)
├── frontend/ # ダッシュボード Web UI
│ ├── app.js # UI 制御・API 通信ロジック
│ ├── index.html # メインダッシュボード HTML
│ └── style.css # スタイリング定義
├── src/ # バックエンドソースコード
│ ├── api/ # 外部API連携 & 内蔵サーバーモジュール
│ │ ├── exploitdb_client.py # ExploitDB API クライアント
│ │ ├── exploitdb_server.py # 内蔵 ExploitDB モックサーバー (/API.php)
│ │ ├── llm_client.py # Gemini API による脆弱性構造解析
│ │ └── nvd_client.py # NVD REST API v2.0 クライアント
│ ├── batch/ # 各種データ構築・更新バッチスクリプト
│ │ ├── build_cwe.py # CWE XML のダウンロード & 階層グラフ生成
│ │ ├── fetch_nvd.py # NVD API から CVE 情報の取得・SQLite 保存
│ │ ├── generate_embedding_docs.py # OpenAI Batch 用データの作成
│ │ ├── generate_embeddings_direct.py # 直接 API 経由での Embeddings 生成
│ │ ├── generate_idf.py # TF-IDF 計算用 IDF辞書生成
│ │ ├── import_embeddings.py # Batch API 出力データのインポート
│ │ └── import_nvd_feeds.py # オフライン NVD フィードデータのインポート
│ ├── core/ # 検索・評価・セキュリティ コアエンジン
│ │ ├── reranker.py # カスタムリランキングスコアリングエンジン
│ │ ├── security.py # 正規化 & パストラバーサル防止セキュリティ機能
│ │ ├── text.py # テキスト正規化 & トークナイズ処理
│ │ └── vector_search.py # Annoy ベクトル検索 & インデックス構築
│ ├── util/ # ユーティリティ
│ │ └── cve_utils.py # CVE テキスト生成・正規化ユーティリティ
│ ├── exploitdb_mgr.py # ExploitDB 管理 & CSV パース処理
│ ├── main.py # DB 初期化 & 個別 CVE 取得エントリポイント
│ └── server.py # メイン Web サーバー (HTTP & API Handler)
├── .env.example # 環境変数テンプレート
├── .gitmodules # ExploitDB サブモジュール設定
├── pyproject.toml # uv プロジェクト定義ファイル
└── README.md # プロジェクトドキュメント
Git リポジトリをクローンし、ExploitDB の Git サブモジュールを初期化します。
git clone https://github.com/your-org/chiteki.git
cd chiteki
# ExploitDB サブモジュールの初期化・同期
git submodule update --init --recursiveuv を使用してプロジェクト依存関係を同期・インストールします。
uv syncプロジェクトルートに .env ファイルを作成し、必要な API キーを設定します。(.env.example を参考にしてください)
cp .env.example .env.env に設定可能な項目一覧:
| 環境変数名 | 必須 | 説明 | デフォルト値 |
|---|---|---|---|
GEMINI_API_KEY |
推奨 | Gemini API キー (LLM 脆弱性解析で使用。LLM_API_KEY もエイリアスとして利用可) |
- |
GEMINI_MODEL |
任意 | 使用する Gemini モデル名 | gemini-3.1-flash-lite |
OPENAI_API_KEY |
推奨 | OpenAI API キー (Embeddings text-embedding-3-small 生成で使用) |
- |
NVD_API_KEY |
任意 | NVD API キー (設定すると API レート制限が 6秒→1秒 に緩和) | - |
EXPLOITDB_API_URL |
任意 | ExploitDB 外部 / モック API のベース URL | http://127.0.0.1:8080 |
システムの初回利用時や最新データへの更新時に、以下のバッチ処理を順に実行します。
MITRE から最新の CWE XML をダウンロードし、グラフ構造データ (cwe_graph.json) を構築します。
uv run python src/batch/build_cwe.pyNVD API から CVE 情報を取得して SQLite (data/cache/nvd.db) に蓄積します。
uv run python src/batch/fetch_nvd.py(※ローカルに data/feeds/*.json.gz がある場合は uv run python src/batch/import_nvd_feeds.py によるオフラインインポートも可能です)
SQLite 内の CVE 記述から OpenAI API を用いて埋め込みベクトルを生成・保存します。
uv run python src/batch/generate_embeddings_direct.pyメインサーバーを起動します。起動時に ExploitDB モック API サーバー (http://127.0.0.1:8080) および Vector Search Annoy インデックスの検証が自動で行われます。
uv run python src/server.py💡 ポート番号を変更したい場合は引数として指定できます:
uv run python src/server.py 8080(またはuv run src/server.py 8080)
サーバー起動後、ブラウザで以下の URL にアクセスします。
http://localhost:8000/
- CVE ID 入力: 対象の CVE (例:
CVE-2017-0144) を入力 - 製品 / ベンダー (任意): 対象コンポーネント (例:
windows) を入力 - 「評価実行」: LLM 解析結果、ExploitDB PoC 情報、およびカスタムリランキングに基づく類似 CVE リストが表示されます。
対象の CVE に対する統合解析結果(NVD メタデータ、PoC 実証コード、Gemini LLM 悪用可能性評価、類似 CVE 推奨)を返却します。
- Method:
GET - URL:
/api/evaluate
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
cve |
string |
はい | 対象の CVE ID (例: CVE-2017-0144) |
product |
string |
いいえ | 対象の製品・ベンダー名 (例: windows) |
force |
boolean |
いいえ | true の場合、キャッシュを無視して強制的に再評価を実行 |
{
"cve_details": {
"cve_id": "CVE-2017-0144",
"description": "The SMBv1 server in Microsoft Windows Server 2008 R2 and Windows 7 SP1...",
"published": "2017-03-17T00:00:00.000",
"last_modified": "2024-07-16T00:00:00.000"
},
"best_exploit": {
"id": "41891",
"file": "exploits/windows/remote/41891.rb",
"description": "Microsoft Windows - 'EternalBlue' SMB Remote Code Execution (MS17-010)",
"platform": "windows",
"type": "remote",
"port": "445"
},
"exploits": [ /* 候補 Exploit 一覧 */ ],
"exploit_code": "# MS17-010 EternalBlue Ruby Exploit Code...",
"evaluation": {
"attack_surface": "SMBv1 サービスが稼働する TCP 445 番ポート",
"payload_structure": "特製された SMBv1 リクエストパケットによるバッファオーバーフロー",
"prerequisites": "SMBv1 サービスへのネットワーク到達性および認証なし接続の許可"
},
"recommendations": [
{
"cve_id": "CVE-2017-0145",
"similarity_score": 0.8542,
"description": "The SMBv1 server in Microsoft Windows..."
}
]
}内蔵の ExploitDB モックサーバー(デフォルト: http://127.0.0.1:8080/API.php)が提供する軽量検索 API です。
- Method:
GET - URL:
/API.php
| パラメータ | 型 | 説明 |
|---|---|---|
cve |
string |
CVE ID でのエグザクト検索 (例: CVE-2017-0144) |
exploit |
string |
キーワードによる Exploit 検索 |
{
"ID": "41891",
"file": "exploits/windows/remote/41891.rb",
"title": "Microsoft Windows - 'EternalBlue' SMB Remote Code Execution (MS17-010)",
"platform": "windows",
"type": "remote",
"port": "445"
}- パストラバーサル対策:
ExploitDBManager.read_exploit_code()および Web サーバーの静的ファイルハンドラにてパス検証を実施し、絶対パス指定や..によるディレクトリトラバーサル攻撃を防いでいます。 - SQL インジェクション対策: すべての SQLite クエリでパラメータ化クエリ (
?) を徹底し、信頼できない入力値の埋め込みを防止しています。 - レート制限遵守: NVD API 規約(API キー保持時は 1 秒間隔、未保持時は 6 秒間隔)に従う自動バックオフおよび再試行ロジックを搭載しています。
本プロジェクトは MIT ライセンス等の配下で提供されます。ExploitDB データにつきましては各ソース (Offensive Security / ExploitDB) のライセンス規約をご確認ください。